
Security News
The Changelog Podcast: Practical Steps to Stay Safe on npm
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.
json-schema-to-typescript
Advanced tools
Compile json schema to typescript typings
Input:
{
  "title": "Example Schema",
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string"
    },
    "lastName": {
      "type": "string"
    },
    "age": {
      "description": "Age in years",
      "type": "integer",
      "minimum": 0
    },
    "hairColor": {
      "enum": ["black", "brown", "blue"],
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": ["firstName", "lastName"]
}
Output:
export interface ExampleSchema {
  firstName: string;
  lastName: string;
  /**
   * Age in years
   */
  age?: number;
  hairColor?: "black" | "brown" | "blue";
}
# Using Yarn:
yarn add json-schema-to-typescript
# Or, using NPM:
npm install json-schema-to-typescript --save
import { compile, compileFromFile } from 'json-schema-to-typescript'
// compile from file
compileFromFile('foo.json')
  .then(ts => fs.writeFileSync('foo.d.ts', ts))
// or, compile a JS object
let mySchema = {
  properties: [...]
}
compile(mySchema, 'MySchema')
  .then(ts => ...)
See server demo and browser demo for full examples.
compileFromFile and compile accept options as their last argument (all keys are optional):
| key | type | default | description | 
|---|---|---|---|
| bannerComment | string | "/* tslint:disable */\n/**\n* This file was automatically generated by json-schema-to-typescript.\n* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n* and run json-schema-to-typescript to regenerate this file.\n*/" | Disclaimer comment prepended to the top of each generated file | 
| cwd | string | process.cwd() | Root directory for resolving $refs | 
| declareExternallyReferenced | boolean | true | Declare external schemas referenced via $ref? | 
| enableConstEnums | boolean | true | Prepend enums with const? | 
| ignoreMinAndMaxItems | boolean | false | Ignore maxItems and minItems for arraytypes, preventing tuples being generated. | 
| style | object | { bracketSpacing: false,  printWidth: 120,  semi: true,  singleQuote: false,  tabWidth: 2,  trailingComma: 'none',  useTabs: false } | A Prettier configuration | 
| unknownAny | boolean | true | Use unknowninstead ofanywhere possible | 
| unreachableDefinitions | boolean | false | Generates code for definitionsthat aren't referenced by the schema. | 
| strictIndexSignatures | boolean | false | Append all index signatures with | undefinedso that they are strictly typed. | 
| $refOptions | object | {} | $RefParser Options, used when resolving $refs | 
A CLI utility is provided with this package.
cat foo.json | json2ts > foo.d.ts
# or
json2ts foo.json > foo.d.ts
# or
json2ts foo.json foo.d.ts
# or
json2ts --input foo.json --output foo.d.ts
# or
json2ts -i foo.json -o foo.d.ts
# or
json2ts -i schemas/**/*.json
# or
json2ts -i schemas/ -o types/
You can pass any of the options described above (including style options) as CLI flags. Boolean values can be set to false using the no- prefix.
# generate code for definitions that aren't referenced
json2ts -i foo.json -o foo.d.ts --unreachableDefinitions
# use single quotes and disable trailing semicolons
json2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi
npm test
title => interfaceallOf ("intersection")anyOf ("union")oneOf (treated like anyOf)maxItems (eg)minItems (eg)additionalProperties of typepatternProperties (partial support)extendsrequired properties on objects (eg)validateRequired (eg)tsTypetsType: Overrides the type that's generated from the schema. Useful for forcing a type to any or when using non-standard JSON schema extensions (eg).tsEnumNames: Overrides the names used for the elements in an enum. Can also be used to create string enums (eg).dependencies (single, multiple)divisibleBy (eg)format (eg)multipleOf (eg)maximum (eg)minimum (eg)maxProperties (eg)minProperties (eg)not/disallowoneOf ("xor", use anyOf instead)pattern (string, regex)uniqueItems (eg)The typescript-json-schema package generates JSON Schema from your TypeScript types. It works in the opposite direction compared to json-schema-to-typescript, making it useful for projects where you start with TypeScript types and need to generate JSON Schema for validation or documentation purposes.
The quicktype package can generate TypeScript types from JSON Schema, JSON data, and other sources. It supports multiple languages and is highly configurable, making it a versatile tool for generating types from various data formats.
The json-schema-to-flow-type package converts JSON Schema to Flow types. While it serves a similar purpose to json-schema-to-typescript, it is specifically designed for projects using Flow instead of TypeScript.
FAQs
compile json schema to typescript typings
The npm package json-schema-to-typescript receives a total of 1,113,402 weekly downloads. As such, json-schema-to-typescript popularity was classified as popular.
We found that json-schema-to-typescript demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.

Security News
Ruby's creator Matz assumes control of RubyGems and Bundler repositories while former maintainers agree to step back and transfer all rights to end the dispute.